#ifndef MAPA_H_
#define MAPA_H_

#include <map>
#include "Territorio.h"
#include "Continente.h"

using namespace std;

class Mapa
{
private:
	map<string,Continente*> continentes;
public:
	Mapa();
	
	/**
	 * Crea un Continente y lo agrega a el mapa.
	 * @param nombre string con el nombre del continente.
	 * @param bonus int con los puntos por conquistar este continente.
	 * @throws ContinenteYaExistenteException
	 */
	void agregarContinente(string continente, int bonus);
	
	/**
	 * Crea un Continente y lo agrega a el mapa.
	 * @param nombre string con el nombre del continente.
	 * @throws ContinenteYaExistenteException
	 */
	void agregarContinente(string continente);
	
	/**
	 * Crea un Territorio y lo agrega al mapa en el continente correspondiente.
	 * @param nombre string con el nombre del territorio.
	 * @param continente string con el nombre del continente.
	 * @throws ContinenteNoExistenteException
	 * @throws TerritorioYaExistenteException
	 */
	void agregarTerritorio(string nombre, string continente);
	
	/**
	 * Quita el continente del mapa y libera la memoria tomada en agregarContinente(...).
	 */
	void quitarContinente(std::string nombre);
	
	
	bool sonAdyacentes(Territorio* unTerritorio, Territorio* otroTerritorio);
	
	/*Devuelve la cantidad de continenetes que estan bajo control del jugador cuyo color se pasa por parametro */
	unsigned int getContinentesEnPoderDeJugador(string colorJugador);
	
	unsigned int getTerritoriosEnPoderDeJugador(string colorJugador);
	
	Territorio* obtenerTerritorio(string nombre);
	
	Continente* obtenerContinente(string nombre);
	
	bool todosLosTerritoriosConEjercitos();
	
	void imprimirEstado();
	
	/**
	 * Devuelve una lista con todos los continente del mapa.
	 */
	list<Continente*>* obtenerContinentes();
	
	virtual ~Mapa();
};

#endif /*MAPA_H_*/
